package br.com.aerusc.persistence.dao;

import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;

import br.com.aerusc.entity.Mensalidade;
import br.com.aerusc.filters.FiltroMensalidade;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;
import com.googlecode.objectify.util.DAOBase;

public class MensalidadeDAO extends DAOBase {
	static {
		ObjectifyService.register(Mensalidade.class);
	}
	private static final Logger log = Logger.getLogger(MensalidadeDAO.class.getName());

	public Mensalidade salvar(Mensalidade mensalidade) {
		Objectify ofy = ObjectifyService.begin();
		Mensalidade retorno = null;
		try {
			ofy.put(mensalidade);
			if (mensalidade.getId() != null) {
				retorno = mensalidade;
			}
		} catch (Exception e) {
			log.severe(e.getMessage());
		}

		return retorno;
	}

	public void remover(Mensalidade mensalidade) {
		Objectify ofy = ObjectifyService.begin();
		try {
			ofy.delete(mensalidade);
		} catch (Exception e) {
			log.severe(e.getMessage());
		}
	}
	
	public void removerLista(List<Mensalidade> mensalidades) {
		Objectify ofy = ObjectifyService.begin();
		try {
			ofy.delete(mensalidades);
		} catch (Exception e) {
			log.severe(e.getMessage());
		}
	}

	public Collection<Mensalidade> salvarLista(List<Mensalidade> mensalidades) {
		Objectify ofy = ObjectifyService.begin();
		Collection<Mensalidade> retorno = null;
		try {
			ofy.put(mensalidades);
			retorno = mensalidades;
		} catch (Exception e) {
			log.severe(e.getMessage());
		}

		return retorno;
	}

	public List<Mensalidade> listarPorFiltro(FiltroMensalidade filtro) {
		Objectify objectify = ObjectifyService.begin();
		Query<Mensalidade> q = objectify.query(Mensalidade.class);
		if (filtro.getIdUsuario() != null) {
			q = q.filter("idUsuario", filtro.getIdUsuario());
		}
		if (filtro.getAno() != null) {
			q = q.filter("ano", filtro.getAno());
		}
		if (filtro.getMes() != null) {
			q = q.filter("mes", filtro.getMes());
		}
		if (filtro.getSituacao() != null) {
			q = q.filter("situacao", filtro.getSituacao());
		}
		List<Mensalidade> retorno = q.list();
		return retorno;
	}

	public Mensalidade recuperar(Long id) {
		Objectify objectify = ObjectifyService.begin();
		Mensalidade retorno = objectify.find(Mensalidade.class, id);
		return retorno;
	}

}
